package org.zhao.nettydemos.baisc;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.util.ReferenceCountUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * 处理入站事件netty提供了 ChannelInboundHandlerAdapter适配器作为默认实现
 *
 * handler完成的IO操作环节大致包括 ： 从通道读取数据包 ， 数据包解码 ， 业务处理 ， 目标数据编码 ， 把数据包写到通道 ， 然后由通道发送到对端
 */
@Slf4j
public class NettyDiscardHandler extends ChannelInboundHandlerAdapter {

    @Override
    public void channelRead(ChannelHandlerContext ctx , Object msg){
        ByteBuf in = (ByteBuf) msg;

        try{
            log.info("收到消息 ， 内容如下: ");
            while(in.isReadable()){
                System.out.print((char)in.readByte());
            }
            System.out.println();
        }finally {
            ReferenceCountUtil.release(msg);
        }
    }

    /**
     * 入站指 输入 ， 出站指 输出
     *
     * netty中的出站可以理解为从Handler传递到Channel的操作 ， 比如write写通道 ， read读通道数据
     *
     * netty中的入站可以理解时从Channel传递到Handler的操作 ， 比如说Channel数据过来后会触发Handler的channelRead入站处理方法
     */

}
